Data processing systems such as application specific integrated circuits (ASICs) typically include multiple functional blocks (cores) that need to communicate with each other. In one interconnection approach, different functional blocks are interconnected directly through on-chip connections, for example through on-chip first-in-first-out (FIFO) buffers. In another interconnection approach, different functional blocks communicate through a shared external memory. A sender functional block writes data to a shared memory location, and a receiver functional block subsequently reads the data from that memory location.